package 第13届;
import java.util.*;
import java.io.*;
public class D_最少刷题数_2143 {
	static int N = 100010;
	static int a[] = new int[N];
	static int sum[] = new int[N];
	static int max = 0;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		int n = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < n; i++) {
			a[i] = Integer.parseInt(st.nextToken());
			// 有刷题数的下标赋值为1
			sum[a[i]]++;
			max = Math.max(max, a[i]);
		}
	
		for(int i = 1; i <= max; i++) {
			sum[i] += sum[i-1];
		}
		
		int mid = -1;
		int newMid = -1;
		// sun[i]存储的是到达i数值的刷题量有多少人，左边则是比i小的，右边则是比i大的
		for(int i = 1; i <= max; i++) {
			// 当前位置的前一个值就是比当前i数值刷题数少的有多少个人
			// n-当前人数，就是比i刷题数多的有多少人
			// 满足这个条件说明到达中位数
			if(sum[i-1] >= n - sum[i]) {
				if(mid == -1) {
					mid = i;
				}
			}
			// 满足这个条件说明到达中位数后面一个值
			// 当比中位数小的值需要补刷题时，那么该值经过不断的刷题后会移动到i值或者i值右边，那么会导致左边刷题人数数量-1
			// 所以我们需要一个新的中位数值，即原中位数后面一位
			if(sum[i-1] - 1 >= n - sum[i]) {
				if(newMid == -1) {
					newMid = i;
					break;
				}
			}
		}
		
		for(int i = 0; i < n; i++) {
			if(a[i] >= mid) {
				bw.write("0 ");
			}else {
				bw.write(newMid - a[i] + " ");
			}
		}
		
		bw.flush();
		bw.close();
		br.close();
		
	}
}
